<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<title>Keil MCBSTM32F400 Evaluation Board</title>
<title>CMSIS-Zone: Keil MCBSTM32F400 Evaluation Board</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<link href="cmsis.css" rel="stylesheet" type="text/css" />
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<script type="text/javascript" src="printComponentTabs.js"></script>
<script type="text/javascript" src="cmsis_footer.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
  $(document).ready(initResizable);
  $(window).load(resizeHeight);
</script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
  $(document).ready(function() { searchBox.OnSelectItem(0); });
</script>
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr style="height: 46px;">
  <td id="projectlogo"><img alt="Logo" src="CMSIS_Logo_Final.png"/></td>
  <td style="padding-left: 0.5em;">
   <div id="projectname">CMSIS-Zone
   &#160;<span id="projectnumber">Version 1.2.0-alpha</span>
   </div>
   <div id="projectbrief">System Resource Management</div>
  </td>
 </tr>
 </tbody>
</table>
</div>
<!-- end header part -->
<div id="CMSISnav" class="tabs1">
    <ul class="tablist">
      <script type="text/javascript">
		<!--
		writeComponentTabs.call(this);
		//-->
      </script>
	  </ul>
</div>
<!-- Generated by Doxygen 1.8.6 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
  <div id="navrow1" class="tabs">
    <ul class="tablist">
      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
      <li class="current"><a href="pages.html"><span>Usage&#160;and&#160;Description</span></a></li>
      <li>
        <div id="MSearchBox" class="MSearchBoxInactive">
        <span class="left">
          <img id="MSearchSelect" src="search/mag_sel.png"
               onmouseover="return searchBox.OnSearchSelectShow()"
               onmouseout="return searchBox.OnSearchSelectHide()"
               alt=""/>
          <input type="text" id="MSearchField" value="Search" accesskey="S"
               onfocus="searchBox.OnSearchFieldFocus(true)" 
               onblur="searchBox.OnSearchFieldFocus(false)" 
               onkeyup="searchBox.OnSearchFieldChange(event)"/>
          </span><span class="right">
            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
          </span>
        </div>
      </li>
    </ul>
  </div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
  <div id="nav-tree">
    <div id="nav-tree-contents">
      <div id="nav-sync" class="sync"></div>
    </div>
  </div>
  <div id="splitbar" style="-moz-user-select:none;" 
       class="ui-resizable-handle">
  </div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('zTEMCB400.html','');});
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
     onmouseover="return searchBox.OnSearchSelectShow()"
     onmouseout="return searchBox.OnSearchSelectHide()"
     onkeydown="return searchBox.OnSearchSelectKey(event)">
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Files</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Pages</a></div>

<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0" 
        name="MSearchResults" id="MSearchResults">
</iframe>
</div>

<div class="header">
  <div class="headertitle">
<div class="title">Keil MCBSTM32F400 Evaluation Board </div>  </div>
</div><!--header-->
<div class="contents">
<div class="textblock"><p>This single processor demo application shows how to do the <a class="el" href="UseCases.html#UseCase_MPU">MPU Protection</a>. Using CMSIS-Zone, it generates:</p>
<ul>
<li>A header file that contains #defines to control the various linker scatter files (and might be used in other parts of the application).</li>
<li>The MPU configuration table source and header files. These contain MPU register settings used during thread switching to update accessible memory regions.</li>
</ul>
<p>The application itself shows how to isolate network stack threads from the user application.</p>
<h1><a class="anchor" id="zTEMCB400_Eclipse"></a>
Using the CMSIS-Zone project</h1>
<ul>
<li><a class="el" href="zTExamples.html#zTExImport">Import</a> the project "Examples\MCBSTM32F400\Zone" into the CMSIS-Zone utility</li>
<li><a class="el" href="zTUI.html#zTProjEx">Open</a> the MCBSTM32F400.azone file</li>
<li><a class="el" href="zTUIGenerate.html">Generate</a> the related output files</li>
</ul>
<p>The MCBSTM32F400.azone file of that project has the following configuration settings:</p>
<ul>
<li>Project mode is set to <code>Execution</code>.</li>
<li><a class="el" href="zTUIZonePart.html#zTUICreate">Added the zones</a> <code>Net</code>, <code>Main</code>, <code>RTX</code>, <code>Blinky</code>, <code>Timer</code>, <code>Idle</code> </li>
<li><a class="el" href="zTUIMemPerRes.html#zTUIMemAdd">Created the memory regions</a> <code>CODE</code>, <code>RAM_SHARED</code>, <code>RAM_NET</code>, <code>RAM_MAIN</code>, <code>RAM_PRIVILEGED</code>, <code>RAM_EVR</code>, <code>RAM_BSD</code>, <code>RAM_LED</code>, <code>RAM_ADC</code>, <code>RAM_TIMER</code>, and <code>RAM_IDLE</code> </li>
<li>Selected various memory regions and peripherals for using in the different zones: <div class="image">
<img src="MCB400_zones.png" alt="MCB400_zones.png"/>
</div>
</li>
</ul>
<p>The zones use common Flash region for all the application code but different SRAM regions to segregate thread data. To generate the output, click on the <a class="el" href="zTUIGenerate.html">Generate</a> button in the Zone Editor tool bar. This creates the following files in the <code>ftl_gen</code> directory:</p>
<table class="doxtable">
<tr>
<th align="left">Template File </th><th align="left">Generated File </th><th align="left">Description  </th></tr>
<tr>
<td align="left">dump_fzone.txt.ftl </td><td align="left">dump_fzone.txt </td><td align="left">Contains the complete model </td></tr>
<tr>
<td align="left">helper.ftlinc </td><td align="left">N/A </td><td align="left">Helper template file with FTL functions. </td></tr>
<tr>
<td align="left">mem_layout.h.ftl </td><td align="left">mem_layout.h </td><td align="left">Header file that contains the memory region definitions, for example for the linker scatter file. </td></tr>
<tr>
<td align="left">mputable.c.ftl </td><td align="left">mputable.c </td><td align="left">MPU Table data definition. </td></tr>
<tr>
<td align="left">mputable.h.ftl </td><td align="left">mputable.h </td><td align="left">MPU Table data declaration. </td></tr>
<tr>
<td align="left">scatter.sct.ftl </td><td align="left">scatter.sct </td><td align="left">Example scatter file for MPU protection. </td></tr>
</table>
<p>These files can be used in any IDE to create the final application. In the following, the usage in Arm Keil MDK is described.</p>
<h1><a class="anchor" id="zTEMCB400_MDK"></a>
Using the MDK project</h1>
<p>The example project can be loaded, built and debugged in µVision by performing the following steps:</p>
<ol type="1">
<li>Navigate to Examples/MCBSTM32F400/MDK</li>
<li>Open the project workspace Blinky_Net.uvprojx</li>
<li>Optional: Update the generated files by executing the copy_gen.bat script.</li>
<li>Run the build in MDK.</li>
</ol>
<h1><a class="anchor" id="zTEMCB400_MDK_Setup"></a>
MDK project setup</h1>
<p>The projects Blinky_Net use the files generated in CMSIS-Zone as follows:</p>
<table class="doxtable">
<tr>
<th align="left">File </th><th align="left">Description  </th></tr>
<tr>
<td align="left">mem_layout.h </td><td align="left">Input for the linker scatter files. </td></tr>
<tr>
<td align="left">mputable.c </td><td align="left">MPU Table data definition. </td></tr>
<tr>
<td align="left">mputable.h </td><td align="left">MPU Table data declaration. </td></tr>
<tr>
<td align="left">scatter.sct </td><td align="left">Initial template for scatter file. </td></tr>
</table>
<h2><a class="anchor" id="zTEMCB400_hwsScatter"></a>
scatter.sct</h2>
<p>As explained previously, the #defines in <code>mem_layout.h</code> can be used to create generic scatter files that are easy to update once changes in the CMSIS-Zone project happen. Using the <b>mem_layout.h</b> file from CMSIS-Zone, the following scatter file is used in the <code>Blinky_Net</code> project, which is based on the generated scatter file template (scatter.sct):</p>
<div class="fragment"><div class="line"><span class="preprocessor">#! armclang -E --target=arm-arm-none-eabi -mcpu=cortex-m3 -xc</span></div>
<div class="line"><span class="preprocessor"></span></div>
<div class="line"><span class="preprocessor">#include &quot;mem_layout.h&quot;</span></div>
<div class="line"></div>
<div class="line">LR_CODE REGION_CODE_START REGION_CODE_SIZE {</div>
<div class="line">  ER_CODE REGION_CODE_START REGION_CODE_SIZE {</div>
<div class="line">     .o (RESET,+FIRST)</div>
<div class="line">      (InRoot$$Sections)</div>
<div class="line">    .ANY (+RO, +XO)</div>
<div class="line">  }</div>
<div class="line">  RW_RAM_PRIVILEGED REGION_RAM_PRIVILEGED_START REGION_RAM_PRIVILEGED_SIZE {</div>
<div class="line">     Net_Config.o (.bss.os.*.cb)</div>
<div class="line">    .ANY (+RW +ZI)</div>
<div class="line">  }</div>
<div class="line">  RW_RAM_SHARED REGION_RAM_SHARED_START REGION_RAM_SHARED_SIZE {</div>
<div class="line">    system_stm32f4xx.o (.data.SystemCoreClock)</div>
<div class="line">;   *.o (.data.shared)</div>
<div class="line">     .o (.bss.shared)</div>
<div class="line">  }</div>
<div class="line">  RW_RAM_EVR REGION_RAM_EVR_START UNINIT REGION_RAM_EVR_SIZE {</div>
<div class="line">    EventRecorder.o (+ZI)</div>
<div class="line">  }</div>
<div class="line">  RW_RAM_BSD REGION_RAM_BSD_START REGION_RAM_BSD_SIZE {</div>
<div class="line">    bsd.o (+RW +ZI)</div>
<div class="line">  }</div>
<div class="line">  RW_RAM_NET REGION_RAM_NET_START REGION_RAM_NET_SIZE {</div>
<div class="line">     Net*.lib (+RW +ZI)</div>
<div class="line">    Net_Config.o (.bss*)</div>
<div class="line">    emac_stm32f4xx.o (+RW +ZI)</div>
<div class="line">    phy_ksz8081rna.o (+RW +ZI)</div>
<div class="line">    phy_st802rt1.o (+RW +ZI)</div>
<div class="line">  }</div>
<div class="line">  RW_RAM_TIMER REGION_RAM_TIMER_START REGION_RAM_TIMER_SIZE {</div>
<div class="line">    timer.o (+RW +ZI)</div>
<div class="line">     .o (.bss.os.thread.stack.rtx.timer)</div>
<div class="line">  }</div>
<div class="line">  RW_RAM_ADC REGION_RAM_ADC_START REGION_RAM_ADC_SIZE {</div>
<div class="line">    adc.o (+RW +ZI)</div>
<div class="line">    adc_mcbstm32f400.o (+RW +ZI)</div>
<div class="line">  }</div>
<div class="line">  RW_RAM_LED REGION_RAM_LED_START REGION_RAM_LED_SIZE {</div>
<div class="line">    led.o (+RW +ZI)</div>
<div class="line">  }</div>
<div class="line">  RW_RAM_MAIN REGION_RAM_MAIN_START REGION_RAM_MAIN_SIZE {</div>
<div class="line">    app.o (+RW +ZI)</div>
<div class="line">  }</div>
<div class="line">  RW_RAM_IDLE REGION_RAM_IDLE_START REGION_RAM_IDLE_SIZE {</div>
<div class="line">    RTX_Config.o (+RW +ZI)</div>
<div class="line">     .o (.bss.os.thread.stack.rtx.idle)</div>
<div class="line">  }</div>
<div class="line">}</div>
</div><!-- fragment --><p>The data segments of segregated software components have been allocated to distinct memory regions. </p>
</div></div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
  <ul>
    <li class="navelem"><a class="el" href="zoneToolUsage.html">CMSIS-Zone Utility</a></li><li class="navelem"><a class="el" href="zTExamples.html">Examples</a></li>
    <li class="footer">
      <script type="text/javascript">
        <!--
        writeFooter.call(this);
        //-->
      </script>    
    </li>
  </ul>
</div>
</body>
</html>
